Skill

মডেলস এবং ডাটাবাইন্ডিং

Web Development - এএসপি ডট (ASP.Net) -

মডেলস (Models) এবং ডাটাবাইন্ডিং (Data Binding) হলো ASP.Net MVC বা ASP.Net Core অ্যাপ্লিকেশনগুলির মূল অংশ, যা ডেটা পরিচালনা এবং ইউজারের ইন্টারফেসের সাথে ডেটার মিথস্ক্রিয়া সহজ করে। Model অ্যাপ্লিকেশনের ডেটা এবং ব্যবসায়িক লজিক ধারণ করে, এবং Data Binding এর মাধ্যমে এটি Views এ প্রদর্শিত হয়।


মডেলস (Models) কী?

Model হল অ্যাপ্লিকেশনের ডেটা এবং ব্যবসায়িক লজিকের প্রতিনিধিত্ব। এটি ডেটাবেস, ফাইল সিস্টেম বা অন্যান্য সোর্স থেকে ডেটা পরিচালনা এবং প্রক্রিয়া করে।

মডেল সাধারণত C# ক্লাস হিসেবে তৈরি হয় এবং এতে প্রপার্টি থাকে, যা অ্যাপ্লিকেশনটির ডেটা স্টোর করে।

মডেলের উদাহরণ

ধরা যাক, আপনি একটি পণ্য (Product) মডেল তৈরি করতে চান, যা পণ্যের নাম, মূল্য এবং স্টক পরিমাণ ধারণ করবে।

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int Stock { get; set; }
}

এখানে Product মডেলটির ৪টি প্রপার্টি রয়েছে: Id, Name, Price, এবং Stock

মডেল ক্লাসটি ডেটাবেসের টেবিলের সাথে সম্পর্কিত হতে পারে। Entity Framework Core ব্যবহার করে আপনি মডেল ক্লাসের মাধ্যমে ডেটাবেসের ডেটা পরিচালনা করতে পারেন।


ডাটাবাইন্ডিং (Data Binding) কী?

ডাটাবাইন্ডিং হল একটি প্রক্রিয়া, যার মাধ্যমে মডেল থেকে ডেটা ভিউতে (View) প্রেরিত হয় এবং ইউজারের ইনপুট আবার মডেলে পাঠানো হয়। ASP.Net MVC বা ASP.Net Core অ্যাপ্লিকেশনে Razor ভিউ ইঞ্জিনের মাধ্যমে ডাটাবাইন্ডিং করা হয়।

ডাটাবাইন্ডিং দুটি ধরনের হতে পারে:

  1. Model-to-View Binding: মডেলের ডেটা ভিউতে প্রদর্শিত হয়।
  2. View-to-Model Binding: ইউজার ইনপুট মডেলে পাঠানো হয়।

Model-to-View Binding

এই প্রক্রিয়ায়, কন্ট্রোলার মডেল থেকে ডেটা নিয়ে ভিউতে পাঠায়। উদাহরণস্বরূপ, আপনি একটি পণ্যের তালিকা প্রদর্শন করতে চান, যা ডেটাবেস থেকে নেওয়া হবে।

কন্ট্রোলারের উদাহরণ

public class ProductController : Controller
{
    private readonly ApplicationDbContext _context;

    public ProductController(ApplicationDbContext context)
    {
        _context = context;
    }

    public IActionResult Index()
    {
        var products = _context.Products.ToList();
        return View(products);  // View এ products ডেটা পাঠানো হচ্ছে।
    }
}

ভিউ (View) এর উদাহরণ

এখানে, কন্ট্রোলার থেকে পাঠানো ডেটা View তে ডাটাবাইন্ডিং হবে।

@model IEnumerable<Product>  <!-- মডেল টাইপ সংজ্ঞায়িত করা -->

<h2>Product List</h2>
<table>
    <thead>
        <tr>
            <th>Id</th>
            <th>Name</th>
            <th>Price</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var product in Model)
        {
            <tr>
                <td>@product.Id</td>
                <td>@product.Name</td>
                <td>@product.Price</td>
            </tr>
        }
    </tbody>
</table>

এখানে @model ডিরেকটিভের মাধ্যমে, ভিউটি Product মডেলের একটি তালিকা গ্রহণ করছে। @foreach লুপের মাধ্যমে প্রতিটি পণ্যের ডেটা HTML টেবিলে প্রদর্শিত হচ্ছে।


View-to-Model Binding

এই প্রক্রিয়ায়, ইউজার ইনপুট ফর্মের মাধ্যমে মডেলে প্রেরিত হয়। যেমন, একটি ফর্মে ইউজার নতুন পণ্য যোগ করতে চান। ইউজারের ইনপুট নিয়ে সেটি Model এ বেঁধে (bind) পাঠানো হবে।

কন্ট্রোলারের উদাহরণ

[HttpPost]
public IActionResult Create(Product product)
{
    if (ModelState.IsValid)
    {
        _context.Products.Add(product);
        _context.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(product);
}

ভিউ (View) এর উদাহরণ

এখানে, @model Product ডিরেকটিভ দিয়ে পণ্য মডেলটি ভিউতে বেঁধে (bind) ইনপুট ফিল্ড তৈরি করা হচ্ছে।

@model Product

<h2>Create New Product</h2>

<form method="post">
    <div class="form-group">
        <label for="Name">Name</label>
        <input type="text" class="form-control" id="Name" name="Name" value="@Model.Name" />
    </div>
    <div class="form-group">
        <label for="Price">Price</label>
        <input type="number" class="form-control" id="Price" name="Price" value="@Model.Price" />
    </div>
    <div class="form-group">
        <label for="Stock">Stock</label>
        <input type="number" class="form-control" id="Stock" name="Stock" value="@Model.Stock" />
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

এখানে, ফর্মের ইনপুট ফিল্ডগুলো Model এর সাথে বেঁধে (bind) আছে, এবং ইউজারের ইনপুট মডেল এপ্লিকেশন সার্ভারে পাঠিয়ে দেওয়া হবে।


ডাটাবাইন্ডিংয়ের প্রকারভেদ

  1. Strongly Typed Data Binding: ভিউটি মডেলের সাথে সরাসরি সংযুক্ত থাকে, এবং এখানে টাইপ সেফটি নিশ্চিত হয়। উদাহরণস্বরূপ, @model Product
  2. Weakly Typed Data Binding: ভিউতে ডেটা কেবল dynamic টাইপ হিসেবে পাঠানো হয়, যেখানে টাইপ সেফটি থাকে না। তবে এটি সাধারণত কম ব্যবহার করা হয় এবং ViewBag বা ViewData এর মাধ্যমে পরিচালিত হয়।

সারাংশ

মডেলস (Models) এবং ডাটাবাইন্ডিং (Data Binding) ASP.Net MVC অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ ধারণা। Models ডেটা ধারণ করে এবং Views এ তা উপস্থাপন করতে সাহায্য করে। ডাটাবাইন্ডিংয়ের মাধ্যমে, মডেল থেকে ভিউতে ডেটা প্রেরণ করা হয় এবং ভিউ থেকে মডেলে ডেটা পাঠানো হয়। Strongly typed data binding ব্যবহার করলে কোডের টাইপ সেফটি বজায় থাকে এবং অ্যাপ্লিকেশনের বাগ কম হয়।

Content added By

মডেল তৈরি করা

ASP.Net অ্যাপ্লিকেশনে Model হলো ডেটা এবং তার লজিকের প্রতিনিধিত্বকারী অংশ। এটি সাধারণত ডাটাবেসের টেবিলগুলোর সাথে সম্পর্কিত থাকে এবং ইউজার ইনপুট বা ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়। ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনে Model ক্লাসের মাধ্যমে ডেটা ধারণ করা হয়।


মডেল তৈরি করার প্রক্রিয়া

ASP.Net প্রজেক্টে Model তৈরি করতে আপনাকে একটি সাধারণ C# ক্লাস তৈরি করতে হবে, যা আপনার অ্যাপ্লিকেশনের ডেটা স্ট্রাকচার বা ডোমেন অবজেক্টকে প্রতিনিধিত্ব করবে।


১. Model ক্লাস তৈরি করা

১.১ ASP.Net Core MVC এ মডেল তৈরি করা

  1. Models ফোল্ডারে নতুন C# ক্লাস তৈরি করুন।
  2. মডেল ক্লাসে প্রপার্টি গুলি যুক্ত করুন, যা আপনার ডেটাবেসের টেবিলের কলাম বা ফর্মের ইনপুটের সাথে সম্পর্কিত হবে।

উদাহরণ:

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int StockQuantity { get; set; }
}

এখানে, Product ক্লাসটি একটি পণ্য (Product) এর জন্য মডেল, যার মধ্যে চারটি প্রপার্টি রয়েছে: Id, Name, Price, এবং StockQuantity


২. ডেটাবেস সম্পর্কিত মডেল (Entity Framework) তৈরি করা

ASP.Net Core অ্যাপ্লিকেশনে Entity Framework (EF) ব্যবহার করে ডেটাবেস মডেল তৈরি করা হয়। আপনি একটি DbContext ক্লাস ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করতে পারেন।

২.১ DbContext ক্লাস তৈরি করা

  1. Data ফোল্ডারে একটি ApplicationDbContext ক্লাস তৈরি করুন এবং এতে DbSet<T> প্রপার্টি গুলি অন্তর্ভুক্ত করুন।
using Microsoft.EntityFrameworkCore;

public class ApplicationDbContext : DbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }

    public DbSet<Product> Products { get; set; }
}

এখানে, ApplicationDbContext ক্লাসটি DbContext থেকে ইনহেরিট করে এবং Products নামে একটি DbSet<Product> প্রপার্টি ডিফাইন করা হয়েছে, যা ডেটাবেসের Products টেবিলের প্রতিনিধিত্ব করে।


৩. ডেটাবেস কনফিগারেশন

ASP.Net Core অ্যাপ্লিকেশনে DbContext কনফিগার করার জন্য আপনাকে Startup.cs ফাইলে ConfigureServices মেথডে Entity Framework কনফিগার করতে হবে।

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
}

এখানে, UseSqlServer ব্যবহার করে SQL Server ডাটাবেসের সাথে সংযোগ স্থাপন করা হচ্ছে। আপনি আপনার ডাটাবেস কনফিগারেশন এবং কানেকশন স্ট্রিং appsettings.json ফাইলে সংজ্ঞায়িত করতে পারেন।


৪. ডাটাবেস মাইগ্রেশন (Entity Framework)

মডেল তৈরি করার পরে, Entity Framework এর মাধ্যমে ডেটাবেস তৈরি বা আপডেট করা হয়। এজন্য Migration ব্যবহার করা হয়।

  1. Package Manager Console বা .NET CLI ব্যবহার করে মাইগ্রেশন তৈরি করুন।

Package Manager Console:

Add-Migration InitialCreate
Update-Database

.NET CLI:

dotnet ef migrations add InitialCreate
dotnet ef database update

এটি ডাটাবেস টেবিল তৈরি করবে, যার মধ্যে আপনার মডেল ক্লাসের প্রপার্টিগুলি থাকবে।


৫. ডেটা ভ্যালিডেশন

ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনে মডেল ক্লাসের মধ্যে Data Annotations ব্যবহার করে ডেটা ভ্যালিডেশন করা যেতে পারে। উদাহরণস্বরূপ, আপনি ফিল্ডগুলোকে আবশ্যক বা নির্দিষ্ট ফরম্যাটে রাখতে পারেন।

public class Product
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Name is required")]
    public string Name { get; set; }

    [Range(0.01, double.MaxValue, ErrorMessage = "Price must be greater than 0")]
    public decimal Price { get; set; }

    [Range(0, int.MaxValue, ErrorMessage = "Stock Quantity cannot be negative")]
    public int StockQuantity { get; set; }
}

এখানে:

  • [Required] এট্রিবিউট দিয়ে Name প্রপার্টি আবশ্যক করা হয়েছে।
  • [Range] এট্রিবিউট দিয়ে Price এবং StockQuantity এর মান সীমাবদ্ধ করা হয়েছে।

সারাংশ

ASP.Net অ্যাপ্লিকেশনে মডেল তৈরি করা একটি গুরুত্বপূর্ণ কাজ, যা ডেটা এবং লজিকের মধ্যে সংযোগ স্থাপন করে। Entity Framework ব্যবহার করে মডেল এবং ডাটাবেস সম্পর্কিত কার্যক্রম সহজভাবে করা যায়। এছাড়া, মডেল ক্লাসে Data Annotations ব্যবহার করে ইনপুট ভ্যালিডেশন সহজ করা সম্ভব।

Content added By

Data Annotations এবং Validation

Data Annotations হলো একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ASP.Net মডেল ক্লাসগুলির মধ্যে ডেটা ভ্যালিডেশন এবং ফর্ম্যাটিং পরিচালনা করতে ব্যবহৃত হয়। এটি মূলত সিএসএস (C#) ক্লাসের প্রোপার্টির উপর বিভিন্ন বৈশিষ্ট্য যোগ করতে সাহায্য করে, যা ডেটা ভ্যালিডেশন এবং ডেটা ফরম্যাটিংয়ের জন্য কাজ করে। ASP.Net Core এবং ASP.Net MVC এ এই টেকনিক্যাল ফিচারটি বিশেষভাবে ব্যবহৃত হয়।

Data Annotations কী?

Data Annotations হলো C# এর ক্লাস প্রোপার্টিতে বিভিন্ন বৈশিষ্ট্য নির্ধারণের জন্য ব্যবহৃত অ্যাট্রিবিউট (Attributes)। এগুলি মডেল বা ক্লাসের বৈধতা পরীক্ষা করতে, ডেটার ফরম্যাট নিশ্চিত করতে, এবং ইন্টারফেসে প্রেরিত ডেটার জন্য কিছু বিধিনিষেধ বা সীমাবদ্ধতা সেট করতে ব্যবহৃত হয়।

Data Annotations ব্যবহার করার মাধ্যমে আপনি ভ্যালিডেশন নিয়মগুলো সরাসরি মডেল ক্লাসে সংজ্ঞায়িত করতে পারেন, যেটি অটোমেটিক্যালি ফর্ম সাবমিশন, API কনট্রোলার বা MVC অ্যাপ্লিকেশনের মাধ্যমে পরিচালিত হবে।


Data Annotations এর সাধারণ অ্যাট্রিবিউট

ASP.Net এ Data Annotations এর কয়েকটি সাধারণ অ্যাট্রিবিউট ব্যবহার করা হয়:

১. [Required]

  • [Required] অ্যাট্রিবিউট ব্যবহার করা হয় একটি প্রোপার্টি বা ফিল্ডকে বাধ্যতামূলক করার জন্য। অর্থাৎ, এটি ফিল্ডটি খালি থাকতে পারবে না।

    public class UserModel
    {
        [Required(ErrorMessage = "Name is required")]
        public string Name { get; set; }
    }
    

২. [StringLength]

  • [StringLength] অ্যাট্রিবিউট ব্যবহার করা হয় একটি স্ট্রিং ফিল্ডের সর্বাধিক এবং ন্যূনতম দৈর্ঘ্য নির্ধারণের জন্য।

    public class UserModel
    {
        [StringLength(100, MinimumLength = 5, ErrorMessage = "Username should be between 5 and 100 characters.")]
        public string Username { get; set; }
    }
    

৩. [Range]

  • [Range] অ্যাট্রিবিউট ব্যবহার করা হয় একটি সংখ্যার নির্দিষ্ট পরিসরের মধ্যে থাকতে বাধ্য করার জন্য।

    public class ProductModel
    {
        [Range(1, 1000, ErrorMessage = "Price must be between 1 and 1000")]
        public decimal Price { get; set; }
    }
    

৪. [EmailAddress]

  • [EmailAddress] অ্যাট্রিবিউট ব্যবহার করা হয় একটি স্ট্রিং ফিল্ডের মাধ্যমে ইমেইল অ্যাড্রেস ভ্যালিডেট করার জন্য।

    public class UserModel
    {
        [EmailAddress(ErrorMessage = "Please enter a valid email address")]
        public string Email { get; set; }
    }
    

৫. [Compare]

  • [Compare] অ্যাট্রিবিউট দুটি প্রোপার্টির মান তুলনা করতে ব্যবহার করা হয়। এটি সাধারণত পাসওয়ার্ড ফিল্ডের ক্ষেত্রে ব্যবহৃত হয়।

    public class UserModel
    {
        public string Password { get; set; }
    
        [Compare("Password", ErrorMessage = "Password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }
    }
    

৬. [DataType]

  • [DataType] অ্যাট্রিবিউট একটি প্রোপার্টির জন্য নির্দিষ্ট ডেটা ধরনের নির্দেশনা দেয়, যেমন ফোন নম্বর, ডেট, অথবা পাসওয়ার্ড।

    public class UserModel
    {
        [DataType(DataType.PhoneNumber)]
        public string PhoneNumber { get; set; }
    }
    

৭. [RegularExpression]

  • [RegularExpression] অ্যাট্রিবিউট ব্যবহার করা হয় একটি নির্দিষ্ট রেগুলার এক্সপ্রেশন অনুযায়ী ডেটার ফরম্যাট চেক করার জন্য।

    public class UserModel
    {
        [RegularExpression(@"^\d{10}$", ErrorMessage = "Phone number must be 10 digits.")]
        public string PhoneNumber { get; set; }
    }
    

Validation কী?

Validation হলো ডেটার সঠিকতা নিশ্চিত করার প্রক্রিয়া। ASP.Net MVC বা Core অ্যাপ্লিকেশনে, Data Annotations সাধারণত ভ্যালিডেশন প্রয়োগের জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে ব্যবহারকারী প্রদত্ত ডেটা সঠিক এবং প্রত্যাশিত নিয়ম অনুসরণ করছে।

ভ্যালিডেশন সাধারণত Client-Side Validation এবং Server-Side Validation এ বিভক্ত করা যায়।

১. Client-Side Validation

  • ক্লায়েন্ট-সাইড ভ্যালিডেশন ব্রাউজারে চলে এবং ব্যবহারকারীর ইনপুটের পূর্বে ত্রুটি দেখায়, যেমন ফর্ম জমা দেওয়ার আগেই ফিল্ডটি খালি না হওয়া বা ভুল ফরম্যাটের ইনপুট দেওয়া হচ্ছে কিনা।
  • এটি JavaScript বা jQuery এর মাধ্যমে করা হয়, এবং Data Annotations স্বয়ংক্রিয়ভাবে ক্লায়েন্ট সাইড ভ্যালিডেশনও জেনারেট করে।

২. Server-Side Validation

  • সার্ভার-সাইড ভ্যালিডেশন তখন কাজ করে যখন ফর্মটি সাবমিট করা হয়। এটি নিশ্চিত করে যে ইনপুট ডেটা সার্ভারের কাছে প্রাপ্ত এবং সঠিকভাবে যাচাই করা হয়েছে।
  • ASP.Net MVC বা Core এ, server-side validation ModelState.IsValid মেথড দিয়ে পরীক্ষা করা হয়:

    if (ModelState.IsValid)
    {
        // Valid data, process the request
    }
    else
    {
        // Invalid data, show error messages
    }
    

Model Validation Example

এখানে একটি সাধারণ উদাহরণ দেওয়া হলো, যেখানে একটি UserModel ক্লাস ব্যবহার করে ভ্যালিডেশন করা হয়েছে:

public class UserModel
{
    [Required(ErrorMessage = "Name is required")]
    [StringLength(50, MinimumLength = 3, ErrorMessage = "Name must be between 3 and 50 characters.")]
    public string Name { get; set; }

    [EmailAddress(ErrorMessage = "Please enter a valid email address")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Password is required")]
    [StringLength(100, MinimumLength = 6, ErrorMessage = "Password must be at least 6 characters long.")]
    public string Password { get; set; }
}

এবং অ্যাকশন মেথডে, ModelState.IsValid চেক করে ইনপুট ডেটার বৈধতা পরীক্ষা করা হয়:

[HttpPost]
public IActionResult Register(UserModel userModel)
{
    if (ModelState.IsValid)
    {
        // Process registration
    }
    else
    {
        // Return view with validation errors
        return View(userModel);
    }
}

সারাংশ

Data Annotations ASP.Net এ ডেটা ভ্যালিডেশন এবং ফরম্যাটিংয়ের জন্য একটি সহজ এবং শক্তিশালী টুল। এটি মডেল ক্লাসের প্রোপার্টিতে বিভিন্ন ভ্যালিডেশন রুল অ্যাপ্লাই করতে সাহায্য করে, যেমন Required, StringLength, Range, এবং EmailAddress। Data Annotations এর মাধ্যমে আপনি সহজে Client-Side এবং Server-Side ভ্যালিডেশন পরিচালনা করতে পারেন, যা ASP.Net অ্যাপ্লিকেশনকে আরও শক্তিশালী এবং নিরাপদ করে তোলে।

Content added By

ফর্ম ডেটা সংগ্রহ করা এবং মডেলে বাইন্ড করা

ASP.Net অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ করা এবং মডেলে বাইন্ড করা একটি সাধারণ প্রক্রিয়া, যা Model Binding এর মাধ্যমে সহজে সম্পন্ন করা যায়। Model Binding হল একটি প্রক্রিয়া যেখানে ফর্মের ইনপুট ডেটা সরাসরি একটি C# মডেল ক্লাসে ম্যাপ করা হয়। এটি অ্যাপ্লিকেশন ডেভেলপমেন্টকে অনেক সহজ এবং পরিষ্কার করে তোলে।

এখানে ASP.Net MVC অথবা ASP.Net Core MVC অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ এবং মডেলে বাইন্ড করার প্রক্রিয়া ব্যাখ্যা করা হয়েছে।


১. ফর্ম ডেটা সংগ্রহ করা

ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ করতে সাধারণত HTML ফর্ম এবং Controller এর মধ্যে ইন্টারঅ্যাকশন করা হয়। ফর্মের ইনপুট ডেটা যখন POST করা হয়, তখন তা মডেল ক্লাসে বাইন্ড করা হয়।

HTML ফর্ম তৈরি করা

প্রথমে HTML ফর্ম তৈরি করতে হবে যেখানে ব্যবহারকারী ইনপুট দেবে:

Example (Index.cshtml):

<form method="post" action="/Home/Create">
    <div>
        <label for="Name">Name</label>
        <input type="text" id="Name" name="Name" />
    </div>
    <div>
        <label for="Email">Email</label>
        <input type="email" id="Email" name="Email" />
    </div>
    <button type="submit">Submit</button>
</form>

এই ফর্মে, Name এবং Email ইনপুট ফিল্ড রয়েছে এবং যখন ফর্মটি সাবমিট হবে, তখন ডেটা POST হয়ে HomeController এর Create অ্যাকশনে পাঠানো হবে।


২. মডেল ক্লাস তৈরি করা

এখন, ডেটা যেটি ফর্ম থেকে পাঠানো হবে তা গ্রহণ করার জন্য একটি মডেল ক্লাস তৈরি করতে হবে।

Example (Person.cs):

public class Person
{
    public string Name { get; set; }
    public string Email { get; set; }
}

এটি একটি সাধারণ মডেল ক্লাস যা ফর্মের Name এবং Email ইনপুটগুলোর জন্য প্রপার্টি ধারণ করে।


৩. মডেলে বাইন্ডিং (Model Binding)

ফর্মের ডেটা মডেলে বাইন্ড করতে Controller এর POST অ্যাকশন ব্যবহার করতে হবে। এখানে ASP.Net MVC বা ASP.Net Core MVC স্বয়ংক্রিয়ভাবে ফর্ম ইনপুট ডেটা গ্রহণ করে এবং তা মডেল ক্লাসের প্রপার্টি সাথে বাইন্ড করে।

Controller এর কোড

Example (HomeController.cs):

public class HomeController : Controller
{
    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Create(Person person)
    {
        if (ModelState.IsValid)
        {
            // মডেল ডেটা সফলভাবে বাইন্ড হয়েছে
            // এখানে আপনি ডেটাবেসে সংরক্ষণ করতে পারেন অথবা অন্য কোনো প্রসেস করতে পারেন
            return RedirectToAction("Index");
        }
        return View("Index");
    }
}

এখানে, Create অ্যাকশন মেথডের মধ্যে Person মডেলটি স্বয়ংক্রিয়ভাবে ফর্ম ডেটা দ্বারা পূর্ণ হবে। ASP.Net MVC বা ASP.Net Core MVC মডেল বাইন্ডিং প্রক্রিয়া ব্যবহার করে Name এবং Email ফর্ম ইনপুটগুলো Person মডেলের প্রপার্টি Name এবং Email এ সেট করে দেবে।


৪. মডেল বাইন্ডিং কিভাবে কাজ করে

  1. Form Submit: যখন ফর্মটি সাবমিট করা হয়, তখন ফর্মের ইনপুট ফিল্ডগুলোর নাম এবং মান HTTP POST রিকোয়েস্টের অংশ হিসেবে পাঠানো হয়।
  2. Model Binding: ASP.Net MVC / ASP.Net Core MVC এই POST রিকোয়েস্টটি গ্রহণ করে এবং ইনপুট ফিল্ডগুলোর মানগুলি সঠিক মডেল ক্লাসের প্রপার্টির সাথে মেলাতে চেষ্টা করে। যদি নাম এবং মান মেলে, তাহলে তা মডেল ক্লাসের প্রপার্টি হিসাবে সেট করা হয়।
  3. Controller Action: মডেলটি কন্ট্রোলারের অ্যাকশনে পৌঁছানোর পর, আপনি এটি ব্যবহার করতে পারেন, যেমন ডেটাবেসে সংরক্ষণ করা অথবা বিভিন্ন প্রসেস করা।

৫. ফর্ম ডেটা ভ্যালিডেশন

ASP.Net এবং ASP.Net Core MVC এ Model Validation খুবই গুরুত্বপূর্ণ। আপনি মডেল ক্লাসের মধ্যে Data Annotations ব্যবহার করে ইনপুট ভ্যালিডেশন করতে পারেন।

Data Annotations উদাহরণ

Example (Person.cs):

public class Person
{
    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Required]
    [EmailAddress]
    public string Email { get; set; }
}

এখানে, Required অ্যাট্রিবিউট ব্যবহার করা হয়েছে যাতে Name এবং Email ইনপুট ফিল্ডগুলো অবশ্যই পূর্ণ হতে হবে, এবং EmailAddress অ্যাট্রিবিউট দিয়ে ইমেইল ফিল্ডটি সঠিক ফরম্যাটে থাকতে হবে।

Controller এ ভ্যালিডেশন চেক

[HttpPost]
public IActionResult Create(Person person)
{
    if (ModelState.IsValid)
    {
        // যদি মডেলটি সঠিকভাবে ভ্যালিড থাকে
        // ডেটা প্রসেস করা হবে
        return RedirectToAction("Index");
    }
    return View("Index");
}

ModelState.IsValid ব্যবহার করে আপনি চেক করতে পারেন যে, ফর্ম ডেটা সঠিকভাবে ভ্যালিড হয়েছে কিনা।


সারাংশ

ASP.Net অ্যাপ্লিকেশনে ফর্ম ডেটা সংগ্রহ করা এবং মডেলে বাইন্ড করা একটি সরল এবং কার্যকরী প্রক্রিয়া। Razor views এর মাধ্যমে ফর্ম তৈরি করা হয় এবং ASP.Net MVC বা ASP.Net Core MVC অ্যাকশন মেথডে ডেটা মডেল ক্লাসে বাইন্ড হয়। এছাড়া, Model Binding এবং Model Validation এর মাধ্যমে ডেটা সহজভাবে সংগ্রহ ও যাচাই করা যায়, যা আপনার অ্যাপ্লিকেশনের প্রক্রিয়াকে অনেক সহজ এবং সুরক্ষিত করে।

Content added By

ViewModel ব্যবহার

ViewModel একটি ডিজাইন প্যাটার্ন যা MVC (Model-View-Controller) আর্কিটেকচারে ব্যবহার করা হয়। এটি Model এবং View এর মধ্যে একটি মধ্যস্থতাকারী হিসেবে কাজ করে, যা শুধুমাত্র View এর জন্য প্রয়োজনীয় ডেটা ধারণ করে। ViewModel সাধারণত Model এর চেয়ে একটি আলাদা কাস্টম ডেটা কন্টেইনার হয়ে থাকে, যাতে View এর জন্য নির্দিষ্ট প্রয়োজনীয় ডেটা থাকে।

ASP.Net MVC এবং ASP.Net Core অ্যাপ্লিকেশনে ViewModel ব্যবহার ডেটার পার্সিং, ভিউ লজিক এবং UI উপস্থাপনাকে আরও দক্ষ ও পরিষ্কার করে তোলে।


ViewModel কী?

  • ViewModel হল একটি ক্লাস যা Model এর ডেটা ধারণ করে, তবে এটি শুধুমাত্র সেই ডেটা ধারণ করে যা ভিউতে প্রদর্শন করতে প্রয়োজন।
  • এটি Controller থেকে View তে ডেটা পাঠানোর প্রক্রিয়া সহজতর করে।
  • ViewModel সাধারণত একাধিক Model এর ডেটা একত্রিত করে, যা একসাথে View তে রেন্ডার করতে সাহায্য করে।

ViewModel এর ব্যবহার

ViewModel ব্যবহার করার মাধ্যমে আপনি Model এর বিভিন্ন ডেটা একত্রিত করে একটি বিশেষভাবে ফর্ম্যাট করা ডেটা স্ট্রাকচার তৈরি করতে পারেন, যা কেবলমাত্র ভিউর জন্য প্রাসঙ্গিক।

১. ViewModel তৈরি করা

ধরা যাক, আমাদের একটি Product এবং Category মডেল রয়েছে এবং আমরা চাচ্ছি ভিউতে এই দুটি মডেল সংযুক্ত করে একটি ভিউ তৈরি করতে।

ViewModel Example:

public class ProductViewModel
{
    public string ProductName { get; set; }
    public decimal Price { get; set; }
    public string CategoryName { get; set; }
}

এখানে, ProductViewModel ক্লাসে আমরা Product এবং Category এর কিছু ডেটা ধারণ করেছি, যা ভিউতে রেন্ডার হবে।

২. Controller থেকে ViewModel পাঠানো

এখন Controller থেকে আমরা ProductViewModel পাঠাবো এবং ভিউতে রেন্ডার করব।

Controller Example:

public class ProductController : Controller
{
    public IActionResult Index()
    {
        var products = new List<ProductViewModel>
        {
            new ProductViewModel { ProductName = "Laptop", Price = 1000, CategoryName = "Electronics" },
            new ProductViewModel { ProductName = "Shirt", Price = 50, CategoryName = "Clothing" }
        };

        return View(products);
    }
}

এখানে, Index() অ্যাকশনটি একটি List তৈরি করেছে এবং সেটি View এ পাঠাচ্ছে।

৩. View তে ViewModel ব্যবহার

এখন আমরা ViewProductViewModel এর ডেটা রেন্ডার করব।

View Example (Razor):

@model List<ProductViewModel>

<h1>Product List</h1>
<table>
    <tr>
        <th>Product Name</th>
        <th>Price</th>
        <th>Category</th>
    </tr>
    @foreach (var product in Model)
    {
        <tr>
            <td>@product.ProductName</td>
            <td>@product.Price</td>
            <td>@product.CategoryName</td>
        </tr>
    }
</table>

এখানে, Model হয়ে List পাস করা হয়েছে। এরপর, আমরা foreach লুপ ব্যবহার করে প্রতিটি ProductViewModel এর প্রপার্টি (যেমন ProductName, Price, এবং CategoryName) ভিউতে প্রদর্শন করেছি।


ViewModel এর উপকারিতা

  1. Decoupling of Data: ViewModel ডেটা ভিউ থেকে মডেলকে আলাদা করে, যার ফলে মডেলটি শুধুমাত্র প্রয়োজনীয় ডেটা পাঠাবে এবং ভিউটি সেই ডেটা দেখাবে।
  2. ডেটা প্রসেসিং: আপনি ViewModel এর মধ্যে ডেটা প্রসেসিং এবং ফরম্যাটিং করতে পারেন যা ভিউর জন্য দরকারি।
  3. কমপ্লেক্স ডেটা ম্যানেজমেন্ট: একাধিক মডেল বা ডেটা সোর্স থেকে ডেটা একত্রিত করে একটি ViewModel এ সেটি পাস করতে পারেন।
  4. ডেটা সিকিউরিটি: ViewModel ব্যবহারের মাধ্যমে আপনি শুধুমাত্র সেই ডেটাই পাঠাতে পারবেন যা ভিউয়ে প্রদর্শিত হবে, যাতে অপ্রয়োজনীয় বা সংবেদনশীল তথ্য ফাঁস না হয়।
  5. সহজ টেস্টিং: ViewModel ব্যবহার করে আপনি কোডের একক অংশের জন্য সহজে ইউনিট টেস্ট করতে পারেন।

ViewModel ব্যবহার করার সময় কিছু গুরুত্বপূর্ণ বিষয়

  1. ViewModel নামকরণ: সাধারণত Model এর নামের সাথে ViewModel যুক্ত করে ViewModel ক্লাসের নাম রাখা হয়, যেমন ProductViewModel
  2. Validation: আপনি DataAnnotations ব্যবহার করে ViewModel এ ইনপুট ভ্যালিডেশন যুক্ত করতে পারেন। উদাহরণস্বরূপ:

    public class ProductViewModel
    {
        [Required]
        public string ProductName { get; set; }
        
        [Range(1, 10000)]
        public decimal Price { get; set; }
    }
    
  3. Performance: ViewModel তৈরির সময় নিশ্চিত করুন যে, আপনি কেবলমাত্র ভিউয়ের জন্য প্রয়োজনীয় ডেটাই পাস করছেন, যাতে অ্যাপ্লিকেশনের পারফরম্যান্স ভাল থাকে।

সারাংশ:
ViewModel ASP.Net MVC এবং ASP.Net Core অ্যাপ্লিকেশনে ডেটা এবং ভিউয়ের মধ্যে সম্পর্ক স্থাপনে গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি ডেটাকে Controller থেকে View তে পাঠানোর একটি শক্তিশালী এবং ক্লিন পদ্ধতি সরবরাহ করে, যা অ্যাপ্লিকেশন উন্নত পারফরম্যান্স এবং স্কেলেবিলিটি প্রদান করতে সহায়ক।

Content added By

Strongly Typed Views

Strongly Typed Views হলো ASP.Net MVC বা ASP.Net Core MVC অ্যাপ্লিকেশনগুলিতে এমন ভিউ, যেখানে model বা ডেটা ক্লাস নির্দিষ্টভাবে টাইপ করা থাকে। এটি ভিউ ফাইলকে একটি নির্দিষ্ট model টাইপের সাথে যুক্ত করে, যা ভিউতে ব্যবহৃত ডেটা সম্পূর্ণভাবে টাইপ সেফ (type-safe) করে তোলে।

Razor ভিউ ইঞ্জিনে Strongly Typed Views ব্যবহার করা হলে, আপনার Model অবজেক্টের প্রপার্টি এবং মেথডগুলির জন্য IntelliSense এবং compile-time checking সুবিধা পাওয়া যায়। এর ফলে কোড লেখার সময় ভুল করার সম্ভাবনা কমে যায় এবং কোড আরও পরিষ্কার, সুরক্ষিত ও সহজে বজায় রাখা সম্ভব হয়।


Strongly Typed Views এর সুবিধা

  1. Compile-Time Checking: মডেল টাইপ সংক্রান্ত ভুলগুলি রানটাইমের পরিবর্তে কম্পাইল টাইমে চেক করা হয়।
  2. IntelliSense: Visual Studio বা অন্য কোনো IDE ব্যবহার করার সময় IntelliSense এর সুবিধা পাওয়া যায়, যা কোড লেখার সময় প্রপার্টি এবং মেথডের পরামর্শ দেয়।
  3. Type Safety: ভিউ ফাইলের মধ্যে টাইপ মেলে না এমন কোন ডেটা ব্যবহারের জন্য ত্রুটি দেখায়, যা রানটাইমে সমস্যা সৃষ্টি করতে পারে।
  4. Code Readability: কোডটি আরও পরিষ্কার ও মানানসই হয়, কারণ আপনি জানেন যে কোন ভিউ কিসের জন্য ব্যবহৃত হচ্ছে এবং কী ধরনের ডেটা আশা করা হচ্ছে।

Strongly Typed View তৈরি করার জন্য ধাপসমূহ

১. Controller এ মডেল পাস করা

একটি strongly typed ভিউ তৈরি করতে, প্রথমে আপনি আপনার Controller থেকে একটি model ভিউতে পাস করবেন। সাধারণত ActionResult এর মাধ্যমে এটি করা হয়।

উদাহরণ:

public class HomeController : Controller
{
    public IActionResult Index()
    {
        var model = new Product
        {
            Name = "Laptop",
            Price = 1200
        };
        return View(model);
    }
}

এখানে, Product একটি মডেল যা Name এবং Price প্রপার্টি ধারণ করে। এই মডেলটি View এ পাস করা হচ্ছে।

২. Razor ভিউ ফাইলে মডেল টাইপ ডিফাইন করা

ভিউ ফাইলে মডেল টাইপ ডিফাইন করতে, Razor এ @model নির্দেশক ব্যবহার করতে হয়।

@model YourNamespace.Models.Product

<!DOCTYPE html>
<html>
<head>
    <title>Product Details</title>
</head>
<body>
    <h1>Product Name: @Model.Name</h1>
    <p>Price: @Model.Price</p>
</body>
</html>

এখানে, @model YourNamespace.Models.Product দ্বারা ভিউটি Product মডেল টাইপের সাথে যুক্ত করা হয়েছে। তারপর, @Model.Name এবং @Model.Price দিয়ে মডেলটির প্রপার্টি রেন্ডার করা হয়েছে।


Strongly Typed View এবং Partial Views

আপনি যদি Partial Views ব্যবহার করেন, তাহলে তাও strongly typed করা যেতে পারে। Partial View-এও আপনি একইভাবে মডেল টাইপ ডিফাইন করবেন।

উদাহরণ:

  1. Controller এ Partial View পাস করা:

    public IActionResult GetProductDetails()
    {
        var product = new Product { Name = "Smartphone", Price = 800 };
        return PartialView("_ProductDetails", product);
    }
    
  2. Partial View (/_ProductDetails.cshtml):

    @model YourNamespace.Models.Product
    
    <div>
        <h3>@Model.Name</h3>
        <p>Price: @Model.Price</p>
    </div>
    

এখানে, _ProductDetails partial view একটি strongly typed ভিউ, যেখানে Product মডেল পাস করা হচ্ছে।


Strongly Typed Views এ Model Validation

Strongly Typed Views ব্যবহার করে আপনি model validation এর সুবিধাও নিতে পারেন। ASP.Net MVC এবং ASP.Net Core MVC তে Data Annotations ব্যবহার করে মডেল ভ্যালিডেশন করা যায়।

উদাহরণ: মডেল ক্লাসে ভ্যালিডেশন অ্যাট্রিবিউট যোগ করা

public class Product
{
    [Required(ErrorMessage = "Product Name is required")]
    public string Name { get; set; }

    [Range(1, 10000, ErrorMessage = "Price must be between 1 and 10000")]
    public decimal Price { get; set; }
}

এখানে, Product মডেলে [Required] এবং [Range] অ্যাট্রিবিউট দিয়ে ভ্যালিডেশন সেট করা হয়েছে।

Razor ভিউতে Validation Display করা

@model YourNamespace.Models.Product

<form method="post">
    <div>
        <label for="Name">Product Name:</label>
        <input type="text" id="Name" name="Name" value="@Model.Name" />
        @Html.ValidationMessageFor(model => model.Name)
    </div>
    <div>
        <label for="Price">Price:</label>
        <input type="text" id="Price" name="Price" value="@Model.Price" />
        @Html.ValidationMessageFor(model => model.Price)
    </div>
    <button type="submit">Submit</button>
</form>

এখানে, @Html.ValidationMessageFor ব্যবহার করে মডেল ভ্যালিডেশন ত্রুটি প্রদর্শন করা হচ্ছে।


সারাংশ

Strongly Typed Views ASP.Net MVC এবং ASP.Net Core MVC অ্যাপ্লিকেশনগুলিতে একটি শক্তিশালী টুল যা model এবং view এর মধ্যে সম্পর্ক স্থাপন করে এবং কোডে টাইপ সেফটি ও কম্পাইল টাইম চেকিং নিশ্চিত করে। Razor সিনট্যাক্সে @model ব্যবহার করে আপনি সহজেই ডাইনামিক ডেটা রেন্ডার করতে পারেন এবং কোডের ভেতরে টাইপ মিসম্যাচের জন্য ভুল কম্পাইলটাইমে ধরতে পারেন। এটি ডেভেলপারদের জন্য কোড আরও পরিষ্কার, সুরক্ষিত এবং রক্ষণাবেক্ষণে সহজ করে তোলে।

Content added By
Promotion